import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * Les obstacles servent a proteger les escargots de predateurs.
 * Lorsqu'un predateur apparait dans l'environnemenent de jeu si un obstacle est present
 * il l'attaquera au lieu de manger les escargots.
 */

public class Obstacle {
	
	private BufferedImage img;
	private int positionObstacle_x;
    private int positionObstacle_y;
    private int durabilite;
    private int prixObstacle;
    private Environnement environnement;
    
    public Obstacle(int positionObstacle_x, int positionObstacle_y,int durabilite, int prixObstacle,Environnement _environnement) {
		this.setPositionObstacle_x(positionObstacle_x);
		this.setPositionObstacle_y(positionObstacle_y);
		this.setDurabilite(durabilite);
		this.setPrixObstacle(prixObstacle);
		this.environnement=_environnement;
				
	}

    /**
	 * Definit un rectangle autour de l'obstacle pour gerer les collisions
	 * @return Rectangle
	 */
    public Rectangle contourCollision() {// Type void -->Rectangle
    	int largeur=53;
    	int hauteur=75;
    	return new Rectangle(this.getPositionObstacle_x(), this.getPositionObstacle_y(), largeur,hauteur);
    }
    
    /**
	 * Gere l'affichage de l'obstacle dans l'environnement 
	 * @param g
	 */
    public void affichage(Graphics g) {
    	if (60<=this.getDurabilite() & this.getDurabilite()<=100){
    		try {
    			img = ImageIO.read(new File("img/obstacleEtat1.png"));
    		} catch (IOException e) {
                        	e.printStackTrace();
    		}
            	g.drawImage(img,this.getPositionObstacle_x(),this.getPositionObstacle_y(),null);
        }
    	
    	if (30<=this.getDurabilite() & this.getDurabilite()<60){
    		try {
    			img = ImageIO.read(new File("img/obstacleEtat2.png"));
    		} catch (IOException e) {
                        	e.printStackTrace();
    		}
            	g.drawImage(img,this.getPositionObstacle_x(),this.getPositionObstacle_y(),null);
        }
    	
    	if (1<=this.getDurabilite() & this.getDurabilite()<30){
    		try {
    			img = ImageIO.read(new File("img/obstacleEtat3.png"));
    		} catch (IOException e) {
                        	e.printStackTrace();
    		}
            	g.drawImage(img,this.getPositionObstacle_x(),this.getPositionObstacle_y(),null);
        }
    }
     
   /**
    * Recupere la position en x de l'obstacle  
    * @return positionObstale_x
    */
	public int getPositionObstacle_x() {
		return positionObstacle_x;
	}

	 /**
	 * Definit la position en x de l'obstacle  
	 * @param positionObstale_x
	 */
	public void setPositionObstacle_x(int positionObstacle_x) {
		this.positionObstacle_x = positionObstacle_x;
	}

	 /**
	 * Recupere la position en y de l'obstacle  
	 * @return positionObstale_y
	 */
	public int getPositionObstacle_y() {
		return positionObstacle_y;
	}

	 /**
	 * Definit la position en y de l'obstacle  
	 * @param positionObstale_y
	 */
	public void setPositionObstacle_y(int positionObstacle_y) {
		this.positionObstacle_y = positionObstacle_y;
	}

	 /**
	 * Recupere la durabilite de l'obstacle 
	 * @return durabilite
	 */
	public int getDurabilite() {
		return durabilite;
	}

/**
 * Definit la durabilite de l'obstacle
 * @param durabilite
 */
	public void setDurabilite(int durabilite) {
		this.durabilite = durabilite;
	}

/**
 * Recupere le prix de l'obstacle
 * @return prixObstacle
 */
	public int getPrixObstacle() {
		return prixObstacle;
	}

/**
 * Definit le prix de l'obstacle
 * @param prixObstacle
 */
	public void setPrixObstacle(int prixObstacle) {
		this.prixObstacle = prixObstacle;
	}

/**
 * verifie l'obstacle pour savoir si il a encore de la durabilite
 * @param i
 */
	public void verifierObstacle(int i) {
		if (environnement.getModele().getListeObstacle().elementAt(i).getDurabilite()<=0){
			environnement.getModele().getListeObstacle().remove(environnement.getModele().getListeObstacle().elementAt(i));
		}		
	}
	
/**
 * Recherche l'obstacle deja endommage par un predateur	
 * @return Obstacle
 */
	
	public Obstacle trouverObstacleEndommage() {
    	Obstacle ObstacleEndommage = null;

    	if (this.environnement.getModele().getListeObstacle().size()!=0) {
    		ObstacleEndommage = this.environnement.getModele().getListeObstacle().elementAt(0);
        	for (int i=0; i<=(this.environnement.getModele().getListeObstacle().size()-1);i++) {
        		if (this.environnement.getModele().getListeObstacle().elementAt(i).getDurabilite() < ObstacleEndommage.getDurabilite()) {
        			ObstacleEndommage=this.environnement.getModele().getListeObstacle().elementAt(i);
        		}
        	}
    	}
		return ObstacleEndommage;
    }

		
	}


